<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Object.assign对象的合并</title>
	</head>
	<body>
		<script>
			//Object.assign()复制对象的可枚举属性,第一个是目标对象，但是不可以为null或者undefined；
			//将后面的对象的属性值等替换掉最后成为目标对象的方法
			
			let P1 = {a:"a"};
			let P2 = {b:"b"};
			let P3 = {c:"c"};
			let Person = [
				{name:"zan",title:"123"},
				{name:"zan1",title:"456"},
				{name:"zan2",title:"789"},
				{name:"zan3",title:"111"},
				
			]
			
			
			let p4,p5;
			 Object.assign(P1,P2,P3);
			console.log(P1);
 			p5 = Object.assign(...Person);
 			console.log(P1);
 			
 			
 			//常见用途，为对象添加属性,this是一个对象的指针，此时通过Object.assign()方法为这个目标对象添加一个
 			//属性x,和属性y，假如this本身自带同样的属性，那么会覆盖这个属性
 			class Point{
 				constructor(x,y){
 					this.x = x;
 					this.y = y;
 				  Object.assign(this,{x,y});			
 				}
 				
 			}
 			let t1 = new Point(2,4);
 			console.log(t1.x);
 			
 			//克隆对象
 			function clone(origin){
 				return Object.assign({},origin); //克隆一个没有原型继承的对象
 				
 			}
 			function clonePro(origin){
 				let pro = Object.getPrototypeOf(origin);//获取原型对象
 				console.log(pro);
 				return Object.assign(Object.create(pro),origin);//根据原型对象创建一个对象，然后将这个对象放进去
 			}
 			class Person1{
 				constructor(){
 					this.age = 1234;
 				}
 				run(){
 					alert("run...");
 				}
 			}
 			const person = new Person1();
 			
 			console.log(clone(person))   //没有run方法
 			console.log(clonePro(person)) //有run方法
 			
 			
 			
		</script>
	</body>
</html>
